<?php
/**
 * @todo 活动分类模型
 * @author simon <mahuan@hrbjjhh.com>
 * @since 2015-07-15
 */
namespace Admin\Model;
use Admin\Model\BaseModel;

class ActivityCategoryModel extends BaseModel {
	
    /* 自动验证规则 */
    protected $_validate = array(
        array('category_name', 'require', '活动名称不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),
        array('category_name', '1,10', '活动长度不能超过10个字符', self::MUST_VALIDATE, 'length', self::MODEL_BOTH),
        array('status', '-1,0,1', '状态码不正确', self::EXISTS_VALIDATE, 'in', self::MODEL_BOTH),
        array('sort', 'number', '排序字段必须为数字', self::EXISTS_VALIDATE, 'regex', self::MODEL_BOTH)
    );
    
    /* 自动完成规则 */
    protected $_auto = array(
        array('create_time', NOW_TIME, self::MODEL_INSERT),
        array('update_time', NOW_TIME, self::MODEL_BOTH)
    );
    
    /**
     * @todo 更新表数据
     * @access public
     * @param string $data 要更新的数据，为空则更新post数据
     * @return mixed
     */
    public function update($data=array()){
        if(empty($data)){
            $update_data = $this->create();
        }else{
            $update_data = $this->create($data);
        }
        if(!$update_data){ //数据对象创建错误
            return false;
        }
        /* 添加或更新数据 */
        if(empty($update_data['activity_category_id'])){
            $res = $this->add();
            action_log('category_add', 'activity_category', $res, UID);//记录行为
        }else{
            $res = $this->save();
            action_log('category_edit', 'activity_category', $update_data['activity_category_id'], UID);//记录行为
        }
        return $res;
    }
    
    /**
     * 获取分类树，指定分类则返回指定分类极其子分类，不指定则返回所有分类树
     * @param  integer $id    分类ID
     * @param  boolean $field 查询字段
     * @return array          分类树
     */
    public function getTree($id = 0, $field = true){
    	$id = (int)$id;
        if($id!=0){
            $info = $this->info($id,'activity_category_id,category_name,parent_id,status,create_time,uid');
            $id   = $info['id'];
        }
        /* 获取所有分类 */
        $map  = array('status' => array('gt', -1));
        $list = $this->field($field)->where($map)->order('sort')->select();
        $list = list_to_tree($list, $pk = 'activity_category_id', $pid = 'parent_id', $child = '_', $root = $id);
        /* 获取返回数据 */
        if(isset($info)){ //指定分类则返回当前分类极其子分类
            $info['_'] = $list;
        } else { //否则返回所有分类
            $info = $list;
        }
        return $info;
    }
    
    /**
     * 获取分类详细信息
     * @param  milit   $id 分类ID或标识
     * @param  boolean $field 查询字段
     * @return array     分类信息
     */
    public function info($id, $field = true){
        /* 获取分类信息 */
        $map = array();
        if(is_numeric($id)){ //通过ID查询
            $map['activity_category_id'] = $id;
        } else { //通过标识查询
            $map['category_name'] = $id;
        }
        return $this->field($field)->where($map)->find();
    }
}
